package com.example.demoapplication;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.demoapplication.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
    //MyViewModel myViewModel;
    MyViewModelWithLiveData myViewModelWithLiveData;

// 使用DataBinding以后  textview 以及button都不需要再初始化
// 由 binding.textView  binding.button 代替
//    TextView textView;
//    Button btn1,btn2;
//
//    ImageView imgBtnLike,imgBtnDislike;

    // 转换 binding layout 以后系统会由xml文件的名字自动生成 类 ActivityMainBinding
    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);


        // 使用DataBinding以后  setContentView 由DataBindingUtil.setContentView代替
        // setContentView(R.layout.activity_main);

        // 创建ViewModel的对象
        // Create a ViewModel the first time the system calls an activity's onCreate() method.
        // Re-created activities receive the same MyViewModel instance created by the first activity.
        // 如果重新创建了该 Activity，它接收的 MyViewModel 实例与第一个 Activity 创建的实例相同。
        // 当所有者 Activity 完成时，框架会调用 ViewModel 对象的 onCleared() 方法，以便它可以清理资源。
        // myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);


        //创建 LiveData 实例以存储某种类型的数据。这通常在 ViewModel 类中完成。
        //创建可定义 onChanged() 方法的 Observer 对象，该方法可以控制当 LiveData 对象存储的数据更改时会发生什么。
        // 通常情况下，您可以在界面控制器（如 Activity 或 Fragment）中创建 Observer 对象。
        //使用 observe() 方法将 Observer 对象附加到 LiveData 对象。observe() 方法会采用 LifecycleOwner 对象。
        // 这样会使 Observer 对象订阅 LiveData 对象，以使其收到有关更改的通知。
        // 通常情况下，您可以在界面控制器（如 Activity 或 Fragment）中附加 Observer 对象。
        myViewModelWithLiveData = ViewModelProviders.of(this).get(MyViewModelWithLiveData.class);

        // 绑定数据源 myViewModelWithLiveData 不加这一句话 DataBinding无法生效
        binding.setData(myViewModelWithLiveData);

        // 代替观察者 Observer<Integer>，数据变动时更新UI
        binding.setLifecycleOwner(this);

//         使用LiveData的观察者模式
//        myViewModelWithLiveData.getLikedNumber().observe(this, new Observer<Integer>() {
//                    @Override
//                    public void onChanged(Integer integer) {
//                        binding.textView.setText(String.valueOf((integer)));
//                    }
//                });

//        textView = findViewById(R.id.textView);
//        // 保证屏幕翻转后数据不会丢失
//        textView.setText(String.valueOf(myViewModel.number));
//        btn1 = findViewById(R.id.button);
//        btn2 = findViewById(R.id.button2);
//        btn1.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myViewModel.number++;
//                textView.setText(String.valueOf((myViewModel.number)));
//            }
//        });
//        btn2.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myViewModel.number++;
//                myViewModel.number++;
//                textView.setText(String.valueOf((myViewModel.number)));
//            }
//        });

// 使用databinding以后这些代码都不在需要
//        // 喜欢+1  不喜欢数据-1
//        imgBtnLike = findViewById(R.id.imageView);
//        imgBtnDislike = findViewById(R.id.imageView2);
//
//        imgBtnLike.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myViewModelWithLiveData.addLikedNumber(1);
//            }
//        });
//        imgBtnDislike.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myViewModelWithLiveData.addLikedNumber(-1);
//            }
//        });



    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }
}
